home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / PD_THEMA / EDITOREN / 7UP_PD / SEPROTO.C < prev    next >
C/C++ Source or Header  |  1998-03-14  |  9KB  |  415 lines

  1. /* SE-Protokoll (nicht benutzt) */
  2. /*****************************************************************************
  3. *
  4. *                                             7UP
  5. *                                      Modul: SEPROTO.C
  6. *                                    (c) by TheoSoft '94
  7. *
  8. *****************************************************************************/
  9. #include <portab.h>
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #include <ctype.h>
  14. #include <aes.h>
  15.  
  16. #include "windows.h"
  17.  
  18. #include "seproto.h"
  19. #include "sefunc.h"
  20.  
  21. extern char errorstr[];
  22. extern WINDOW _wind[];
  23. extern WORD gl_apid;
  24. extern OBJECT *winmenu;
  25.  
  26. typedef struct
  27. {  /* Struktur wie Messagepipe */
  28.     WORD msg;
  29.     WORD id;
  30.     WORD overlen;
  31.     WORD se_commands;
  32.     LONG es_commands;
  33.     WORD supp_version;
  34.     WORD supp_apid;
  35. } SHELL;
  36.  
  37. static SHELL shell={0,-1,0,0,0L,0,-1};
  38. static SHELL editor={0,-1,0,0,0L,0,-1};
  39. static WORD se_buf[8];
  40.  
  41. /* Editorfunktionen ********************************************************/
  42.  
  43. WORD ESActive(void)
  44. {
  45.     return(shell.id>=0);
  46. }
  47.  
  48. WORD ESinit(WORD apid, WORD shellapid, WORD se_commands, LONG es_commands)
  49. {
  50.     memset(se_buf,0,sizeof(se_buf));
  51.     se_buf[0]=ES_OK;
  52.     se_buf[1]=gl_apid;
  53.     se_buf[2]=0;
  54.     se_buf[3]=se_commands;
  55.     *(LONG *)(&se_buf[4])=es_commands;
  56.     se_buf[6]=SEPROTOVERSION;
  57.     return(appl_write(shellapid,16,se_buf));
  58. }
  59.  
  60. WORD ESok(WORD apid, WORD se_commands, LONG es_commands)
  61. {
  62.     memset(se_buf,0,sizeof(se_buf));
  63.     se_buf[0]=ES_OK;
  64.     se_buf[1]=apid;
  65.     se_buf[2]=0;
  66.     se_buf[3]=se_commands;
  67.     *(LONG *)(&se_buf[4])=es_commands;
  68.     se_buf[6]=SEPROTOVERSION;
  69.     se_buf[7]=shell.id;
  70.     return(appl_write(shell.id,16,se_buf));
  71. }
  72.  
  73. WORD ESack(WORD apid, WORD answer)
  74. {
  75.     memset(se_buf,0,sizeof(se_buf));
  76.     se_buf[0]=ES_ACK;
  77.     se_buf[1]=apid;
  78.     se_buf[3]=answer;
  79.     return(appl_write(shell.id,16,se_buf));
  80. }
  81.  
  82. WORD EScompile(WORD apid, char *pathname)
  83. {
  84.     memset(se_buf,0,sizeof(se_buf));
  85.     se_buf[0]=ES_COMPILE;
  86.     se_buf[1]=gl_apid;
  87.     *((char **)(&se_buf[3])) = pathname;
  88.     return(appl_write(shell.id,16,se_buf));
  89. }
  90.  
  91. WORD ESmake(WORD apid, char *pathname)
  92. {
  93.     memset(se_buf,0,sizeof(se_buf));
  94.     se_buf[0]=ES_MAKE;
  95.     se_buf[1]=gl_apid;
  96.     *((char **)(&se_buf[3])) = pathname;
  97.     return(appl_write(shell.id,16,se_buf));
  98. }
  99.  
  100. WORD ESmakeall(WORD apid, char *pathname)
  101. {
  102.     memset(se_buf,0,sizeof(se_buf));
  103.     se_buf[0]=ES_MAKEALL;
  104.     se_buf[1]=gl_apid;
  105.     *((char **)(&se_buf[3])) = pathname;
  106.     return(appl_write(shell.id,16,se_buf));
  107. }
  108.  
  109. WORD ESlink(WORD apid, char *pathname)
  110. {
  111.     memset(se_buf,0,sizeof(se_buf));
  112.     se_buf[0]=ES_LINK;
  113.     se_buf[1]=gl_apid;
  114.     *((char **)(&se_buf[3])) = pathname;
  115.     return(appl_write(shell.id,16,se_buf));
  116. }
  117.  
  118. WORD ESexec(WORD apid, char *pathname)
  119. {
  120.     memset(se_buf,0,sizeof(se_buf));
  121.     se_buf[0]=ES_EXEC;
  122.     se_buf[1]=gl_apid;
  123.     *((char **)(&se_buf[3])) = pathname;
  124.     return(appl_write(shell.id,16,se_buf));
  125. }
  126.  
  127. WORD ESmakeexec(WORD apid, char *pathname)
  128. {
  129.     memset(se_buf,0,sizeof(se_buf));
  130.     se_buf[0]=ES_MAKEEXEC;
  131.     se_buf[1]=gl_apid;
  132.     *((char **)(&se_buf[3])) = pathname;
  133.     return(appl_write(shell.id,16,se_buf));
  134. }
  135.  
  136. WORD ESproject(WORD apid, char *pathname)
  137. {
  138.     memset(se_buf,0,sizeof(se_buf));
  139.     se_buf[0]=ES_PROJECT;
  140.     se_buf[1]=gl_apid;
  141.     *((char **)(&se_buf[3])) = pathname;
  142.     return(appl_write(shell.id,16,se_buf));
  143. }
  144.  
  145. WORD ESquit(WORD apid)
  146. {
  147.     memset(se_buf,0,sizeof(se_buf));
  148.     se_buf[0]=ES_QUIT;
  149.     se_buf[1]=apid;
  150.     return(appl_write(shell.id,16,se_buf));
  151. }
  152.  
  153. WORD ESaction(WORD apid, char *pathname, WORD exitcode)
  154. {
  155.     switch(exitcode)
  156.     {
  157.         case 9:
  158.         case 8:
  159.         case 7: 
  160.             return(0); /* Fehler */
  161.         case 6:
  162.             return(ESmakeexec(apid, pathname));
  163.         case 5:
  164.             return(ESexec(apid, pathname));
  165.         case 4:
  166.             return(ESmakeall(apid, pathname));
  167.         case 3:
  168.             return(ESmake(apid, pathname));
  169.         case 2:
  170.             return(ESlink(apid, pathname));
  171.         case 1:
  172.             return(EScompile(apid, pathname));
  173.     }
  174. }
  175.  
  176. /* Serverfunktionen ********************************************************/
  177.  
  178. WORD SEActive(void)
  179. {
  180.   return(editor.id>=0);
  181. }
  182.  
  183. WORD SEinit(WORD apid, WORD editorapid, WORD se_commands, LONG es_commands)
  184. {
  185.     memset(se_buf,0,sizeof(se_buf));
  186.     se_buf[0]=SE_OK;
  187.     se_buf[1]=gl_apid;
  188.     se_buf[2]=0;
  189.     se_buf[3]=se_commands;
  190.     *(LONG *)(&se_buf[4])=es_commands;
  191.     se_buf[6]=SEPROTOVERSION;
  192.     return(appl_write(editorapid,16,se_buf));
  193. }
  194.  
  195. WORD SEok(WORD apid, WORD se_commands, LONG es_commands)
  196. {
  197.     memset(se_buf,0,sizeof(se_buf));
  198.     se_buf[0]=SE_OK;
  199.     se_buf[1]=gl_apid;
  200.     se_buf[2]=0;
  201.     se_buf[3]=se_commands;
  202.     *(LONG *)(&se_buf[4])=es_commands;
  203.     se_buf[6]=SEPROTOVERSION;
  204.     se_buf[7]=editor.id;
  205.     return(appl_write(editor.id,16,se_buf));
  206. }
  207.  
  208. WORD SEack(WORD apid, WORD answer)
  209. {
  210.     memset(se_buf,0,sizeof(se_buf));
  211.     se_buf[0]=SE_ACK;
  212.     se_buf[1]=apid;
  213.     se_buf[3]=answer;
  214.     return(appl_write(editor.id,16,se_buf));
  215. }
  216.  
  217. WORD SEopen(WORD apid, char *pathname)
  218. {
  219.     memset(se_buf,0,sizeof(se_buf));
  220.     se_buf[0]=SE_OPEN;
  221.     se_buf[1]=gl_apid;
  222.     *((char **)(&se_buf[3])) = pathname;
  223.     return(appl_write(editor.id,16,se_buf));
  224. }
  225.  
  226. WORD SEerror(WORD apid, ERRINFO *errinfo)
  227. {
  228.     memset(se_buf,0,sizeof(se_buf));
  229.     se_buf[0]=SE_ERROR;
  230.     se_buf[1]=gl_apid;
  231.     *((ERRINFO **)(&se_buf[3])) = errinfo;
  232.     return(appl_write(editor.id,16,se_buf));
  233. }
  234.  
  235. WORD SEerrfile(WORD apid, char *pathname, char *errorfile)
  236. {
  237.     memset(se_buf,0,sizeof(se_buf));
  238.     se_buf[0]=SE_ERRFILE;
  239.     se_buf[1]=gl_apid;
  240.     *((char **)(&se_buf[3])) = errorfile;
  241.     *((char **)(&se_buf[5])) = pathname;
  242.     return(appl_write(editor.id,16,se_buf));
  243. }
  244.  
  245. WORD SEproject(WORD apid, char *pathname)
  246. {
  247.     memset(se_buf,0,sizeof(se_buf));
  248.     se_buf[0]=SE_PROJECT;
  249.     se_buf[1]=gl_apid;
  250.     *((char **)(&se_buf[3])) = pathname;
  251.     return(appl_write(editor.id,16,se_buf));
  252. }
  253.  
  254. WORD SEquit(WORD apid)
  255. {
  256.     memset(se_buf,0,sizeof(se_buf));
  257.     se_buf[0]=SE_QUIT;
  258.     se_buf[1]=gl_apid;
  259.     return(appl_write(editor.id,16,se_buf));
  260. }
  261.  
  262. WORD SEterminate(WORD apid)
  263. {
  264.     memset(se_buf,0,sizeof(se_buf));
  265.     se_buf[0]=SE_TERMINATE;
  266.     se_buf[1]=gl_apid;
  267.     return(appl_write(editor.id,16,se_buf));
  268. }
  269.  
  270. void Wgotoxy(WINDOW *wp, int errcol, long errline)
  271. {
  272.     if(wp)
  273.     {
  274.         hndl_goto(wp,NULL,errline);
  275.         graf_mouse(M_OFF,NULL);
  276.         Wcursor(wp);
  277.         wp->col = (errcol-1) - wp->wfirst/wp->wscroll - 1;
  278.         wp->cspos = Wshiftpage(wp,0,wp->cstr->used);
  279.         Wcursor(wp);
  280.         graf_mouse(M_ON,NULL);
  281.     }
  282. }
  283.  
  284. WORD hndl_SEProt(WORD msgbuf[])
  285. {
  286.     char pathname[PATH_MAX];
  287.     ERRINFO errinfo;
  288.     WINDOW *wp;
  289.     WORD i, ok;
  290.  
  291.     wp=Wgettop();
  292.  
  293.     switch(msgbuf[0])
  294.     {
  295.         case SE_INIT :
  296.             memmove(&shell,msgbuf,sizeof(msgbuf));
  297.             ESok(gl_apid,
  298.                             seInit
  299.                          | seOk
  300.                          | seAck
  301.                          | seOpen
  302.                          | seError
  303.                          | seErrfile,
  304.                             esInit
  305.                          | esOk
  306.                          | esAck
  307.                          | esCompile
  308.                          | esLink
  309.                          | esMake
  310.                          | esMakeall
  311.                          | esExec
  312.                          | esMakeexec);
  313.             break;
  314.         case SE_OK :
  315.             memmove(&shell,msgbuf,sizeof(msgbuf));
  316.             break;
  317.         case SE_ACK :
  318.             ok=msgbuf[3];
  319.             break;
  320.         case SE_OPEN :
  321.             ESack(gl_apid, TRUE);
  322.             strcpy(pathname,*((char **)(&msgbuf[3])));
  323.             Wreadtempfile(pathname,FALSE);
  324.             wind_update(BEG_UPDATE);
  325.             menu_bar(winmenu,TRUE);
  326.             wind_update(END_UPDATE);
  327.             break;
  328.         case SE_ERROR :
  329.             ESack(gl_apid, TRUE);
  330.             memmove(&errinfo,*((ERRINFO **)(&msgbuf[3])),sizeof(ERRINFO));
  331.             strcpy(errorstr,errinfo.errmess);
  332.             errinfo.errcol=msgbuf[5];
  333.             errinfo.errline=*((long *)&msgbuf[6]);
  334.             wp=Wreadtempfile(errinfo.errfile,FALSE);
  335.             if(wp)
  336.                 Wgotoxy(wp,errinfo.errcol,errinfo.errline);
  337.             break;
  338.         case SE_ERRFILE :
  339.             ESack(gl_apid, TRUE);
  340.             strcpy(pathname,*((char **)(&msgbuf[5])));
  341.             Wreadtempfile(pathname,FALSE);
  342.             strcpy(pathname,*((char **)(&msgbuf[3])));
  343.             Wreadtempfile(pathname,FALSE);
  344.             break;
  345.         case SE_PROJECT :
  346.             ESack(gl_apid, FALSE);
  347.             /*strcpy(pathname,*((char **)(&msgbuf[3])));*/
  348.             break;
  349.         case SE_QUIT :
  350.             memset(&shell,0,sizeof(SHELL));
  351.             shell.id=-1;
  352.             break;
  353.         case SE_TERMINATE :
  354.             ESack(gl_apid, TRUE);
  355.             if(wp && wp->w_state & CHANGED)
  356.             {
  357.                 if(!strcmp((char *)Wname(wp),"NAMENLOS"))
  358.                     write_file(wp,TRUE);
  359.                 else
  360.                     write_file(wp,FALSE);
  361.             }
  362.             for(i=1;i<MAXWINDOWS;i++)
  363.                 _wind[i].w_state &= ~CHANGED;
  364.             ESquit(gl_apid);
  365.             exit(0);
  366.             break;
  367.         case ES_INIT :
  368.             ESinit(gl_apid, appl_find("SHELL   "),
  369.                             seInit
  370.                          | seOk
  371.                          | seAck
  372.                          | seOpen
  373.                          | seError
  374.                          | seErrfile,
  375.                             esInit
  376.                          | esOk
  377.                          | esAck
  378.                          | esCompile
  379.                          | esLink
  380.                          | esMake
  381.                          | esMakeall
  382.                          | esExec
  383.                          | esMakeexec);
  384.             break;
  385.         case ES_OK :
  386.             break;
  387.         case ES_ACK :
  388.             break;
  389.         case ES_COMPILE :
  390.             /*EScompile(gl_apid, Wname(wp));*/
  391.             break;
  392.         case ES_MAKE :
  393.             /*ESmake(gl_apid, NULL);*/
  394.             break;
  395.         case ES_MAKEALL :
  396.             /*ESmakeall(gl_apid, NULL);*/
  397.             break;
  398.         case ES_LINK :
  399.             /*ESlink(gl_apid, NULL);*/
  400.             break;
  401.         case ES_EXEC :
  402.             /*ESexec(gl_apid, NULL);*/
  403.             break;
  404.         case ES_MAKEEXEC :
  405.             /*ESmakeexec(gl_apid, NULL);*/
  406.             break;
  407.         case ES_PROJECT :
  408.             /*ESproject(gl_apid, pathname);*/
  409.             break;
  410.         case ES_QUIT :
  411.             break;
  412.     }
  413. }
  414.  
  415.